#include "../header.h"

//进程退出函数
//1.exit ：执行清理函数 + 清理IO缓冲区
//2._exit ：不执行清理函数。
//3.atexit：清理函数注册函数。
//4.清理函数 编写出来。
//int atexit(void (*function)(void));
// void (*function)(void) 函数指针：没有参数 没有返回值

int *p =NULL;

//扩展功能
void clean_fun(void)
{
    printf("清理函数:%s start\n",__func__);
    printf("释放空间 关闭文件 发送信号\n");
    free(p);
    printf("清理函数:%s end\n",__func__);
}
int main(int argc, char const *argv[])
{
    pid_t pid = fork();
    if(pid <0)
    {
        perror("vfork error\n");
        return -1;
    }    
    if(pid > 0)
    {
        printf("this is parents process:%d start\n",getpid());
        wait(NULL);
        printf("this is parents process:%d end\n",getpid());
    }
    if(pid == 0 )
    {   
       printf("this is child process:%d start\n",getpid());
       //子函数开始  注册一个清理函数，可以进行收尾工作。
       atexit(clean_fun);
       //申请堆空间
       p = malloc(4);
       *p = 100;
       printf("输出数据是：%d\n",*p);
       printf("this is child process:%d end\n",getpid());
       _exit(0);
       
    }

    return 0;
}
